﻿package com.chaopei.day06.service.impl;

import com.chaopei.day06.entity.Tree;
import com.chaopei.day06.service.TreeService;

import java.util.*;

/**
 * @Author Corday 天涯
 * @Date 2022/3/10 15:47
 * 集合应用
 * Collection与Map
 * Collection: Set->TreeSet,HashSet;List->ArrayList,LinkedList
 * 通用6个方法:add,remove,container,size,iterator,isEmpty
 * List专项方法:set,get,listIterator,indexOf,
 * Map:HashMap,TreeMap,HashTable
 * 通用方法:put,keySet,values,get()
 */
public class TreeServiceImpl implements TreeService {
    @Override
    public void getList() {
//  集合的应用
        List<Tree> list = new ArrayList<>();
        list.add(new Tree("tree1", 80, 90d));
        list.add(new Tree("tree2", 50, 70d));
        list.add(new Tree("tree3", 60, 60d));
        list.add(new Tree("tree3", 60, 60d));
        list.add(new Tree("tree3", 60, 60d));
        System.out.println("------list-------");
        for(Tree t:list){
            System.out.println(t);
        }
        System.out.println("-------------");
//        生迭代器对象
        ListIterator<Tree> its = list.listIterator();
        while (its.hasNext()){
            System.out.println(its.next());
        }
        System.out.println("-----通过索引号获取并修改-------");
        System.out.println("list[2]:"+list.get(2));
        list.set(2,new Tree("t2",25,38d));
        System.out.println("list[2]:"+list.get(2));
        Tree t=list.remove(1);
        System.out.println(list);
        list.clear();
        System.out.println(list);
    }
//    2.Set集合的应用
    public void playSet(){
        //存储不重复内容的对象,自定义类需要重写hashCode与equals函数
        Set<Tree> set = new HashSet<>();
        System.out.println("------set------");
        set.add(new Tree("tree1", 80, 90d));
        set.add(new Tree("tree1", 80, 90d));
        set.add(new Tree("tree1", 80, 90d));
        set.add(new Tree("tree2", 50, 40d));
        set.add(new Tree("tree3", 30, 20d));
        System.out.println(set);
    }
//    3.Map集合的应用
    public void playMap(){
//        Map<键名,值>,键名惟一,值可以重复
        Map<Integer,String> map = new TreeMap<>();
        map.put(1,"tom");
        map.put(2,"bean");
        map.put(3,"mary");
        map.put(4,"coco");
        map.put(5,"tina");
        Integer key = new Integer(1);
        String str=map.get(1);//也可以放key
        System.out.println("map拿到:"+str);
        System.out.println("------遍历----");
//        先拿到所有键名的集合
        Set<Integer> keys=map.keySet();
        for(Integer it:keys){//遍历map集合,输出键-值对
            System.out.println(it+":"+map.get(it));
        }
        //拿到所有值的集合
       Collection<String> values = map.values();
        //拿到所有的键与值的Entry对象的集合
       Set<Map.Entry<Integer,String>> maps=map.entrySet();
       for(Map.Entry<Integer,String> entry:maps){
           System.out.println("键名:"+entry.getKey()+" 值:"+entry.getValue());
       }
    }
//    4.请运List与Map集合,存放目录结构的数据,并遍历此目录数据
    /**
     * 第1章 山村小道仙
     *    1.1 xxx
     *      1.1.1 xxxx
     *      1.1.2 xxx
     *    第2节 偶遇
     * 第2章 我在原始社会快乐日子
     *   第1节 abc
     *   第2节 cde
     *   第3节 ddd
     * 第3章 再见唐朝
     *   第1节 start
     *   第2节 the end
     */
    public  void playMenu(){
        //1.实现多篇文章的目录存取
        List<Map<String,Map<String,String>>>  li = new ArrayList<>();
        //2.实现二级目录结构,同时存放章节的map
        Map<String,TreeMap<String,String>> zj = new TreeMap<>();
        //第一章的内容
        TreeMap<String,String> map1 =new TreeMap<>();
        map1.put("第1节","出山");
        map1.put("第2节","偶遇");
        zj.put("第1章 山村小道仙",map1);
        //第二章的内容
        TreeMap<String,String> map2 =new TreeMap<>();
        map2.put("第1节","abc");
        map2.put("第2节","cde");
        map2.put("第3节","ddd");
        zj.put("第2章 我在原始社会快乐日子",map2);
        //第三章的内容
        TreeMap<String,String> map3 =new TreeMap<>();
        map3.put("第1节","start");
        map3.put("第2节","The end");
        zj.put("第3章 再见唐朝",map3);
       Set<String> keys = zj.keySet();
       for(String key:keys){
          TreeMap<String,String> hm=zj.get(key);
           System.out.println(key);
          Set<String> jies=hm.keySet();
          for(String jie:jies){
               System.out.println(" "+jie+" "+hm.get(jie));
           }
       }
    }
}

class  TestList{
    public static void main(String[] args) {
        TreeService ts = new TreeServiceImpl();
        TreeServiceImpl tsi = new TreeServiceImpl();
       // ts.getList();
        //((TreeServiceImpl) ts).playSet();
        //tsi.playMap();
        tsi.playMenu();

    }

}
